Supongamos que queremos clasificar a un individuo en alguna de dos posibles categorías, lo primero que se debe hacer es elegir un valor \(k\) correspondiente al número de elementos a tomar como muestra que se encuentran ya clasificados en alguna de las dos categorías. Ahora el algoritmo consiste el contar el número de elementos de cada categoría que aparecieron dado el \(k\) mencionado anteriormente, el individuo que se quiere clasificar será tomado como miembro del grupo en el cual su conteo de elementos sea mayor.
library(kableExtra)
library(class)
library(caret)
base <- read.csv("../Bases de datos/vacation-trip-classification.csv")
kable(head(base),"markdown")
Income | Family_size | Result |
---|---|---|
120000 | 3 | Buyer |
88000 | 4 | Non-buyer |
90000 | 2 | Non-buyer |
85000 | 2 | Non-buyer |
110000 | 2 | Buyer |
102000 | 2 | Buyer |
Cuando observamos la Income(ingreso) podemos darnos cuenta de aparición tanto de valores muy grande como valores muy pequeños lo que puede causar que el modelo no sea construido de la mejor manera por lo que debemos recurrir a escalar esta variable.
base$Income_scale <- scale(base$Income)
Para la construcción de este modelo en R se debe ingresar tanto el conjunto de validación como el de prueba a tener en cuenta a la hora de construir y probar el modelo.
set.seed(1)
t <- createDataPartition(base$Income_scale,p = 0.8, list = F)
train <- base[t,]
test <- base[-t,]
modelo <- knn(train[,c(2,4)],test[,c(2,4)],train[,3], k = 3)
Realizamos la matriz de confución.
table(modelo, test$Result, dnn = c("Predicho","Actual"))
## Actual
## Predicho Buyer Non-buyer
## Buyer 2 2
## Non-buyer 1 3